package GPSChallenge;
import org.jdom2.*;

import GPSChallenge.obstaculo.ControlPolicial;
import GPSChallenge.obstaculo.Obstaculo;
import GPSChallenge.obstaculo.ObstaculoVacio;
import GPSChallenge.obstaculo.Piquete;
import GPSChallenge.obstaculo.Pozo;
import GPSChallenge.sorpresa.Sorpresa;
import GPSChallenge.sorpresa.SorpresaCambioDeVehiculo;
import GPSChallenge.sorpresa.SorpresaDesfavorable;
import GPSChallenge.sorpresa.SorpresaFavorable;
import GPSChallenge.sorpresa.SorpresaVacia;

public class Calle {
	
	private Obstaculo unObstaculo;
	private Sorpresa unaSorpresa;
	private double numeroAleatorioSorpresa;
	private double numeroAleatorioObstaculo;
	
	
	public Calle(){
		
		this.unObstaculo = new ObstaculoVacio();
		this.unaSorpresa = new SorpresaVacia();
		this.numeroAleatorioSorpresa= Math.random();
		this.numeroAleatorioObstaculo= Math.random();
		this.asignarSorpresaAleatoria(numeroAleatorioSorpresa);
		this.asignarObstaculoAleatorio(numeroAleatorioObstaculo);
		
	}
	
	public Calle(Element unaCalle){
		this.unObstaculo = new ObstaculoVacio();
		this.unaSorpresa = new SorpresaVacia();
		this.numeroAleatorioSorpresa=Double.parseDouble(unaCalle.getAttributeValue("numeroAleatorioSorpresa"));
		this.numeroAleatorioObstaculo=Double.parseDouble(unaCalle.getAttributeValue("numeroAleatorioObstaculo"));
		this.asignarSorpresaAleatoria(numeroAleatorioSorpresa);
		this.asignarObstaculoAleatorio(numeroAleatorioObstaculo);
	}

	
	public void asignarObstaculoAleatorio(double numeroAleatorio){
		if (numeroAleatorio>0.7 && numeroAleatorio<= 0.8){
			this.unObstaculo= new Pozo();
		} else {
			if (numeroAleatorio>0.8 && numeroAleatorio<= 0.9){
				this.unObstaculo= new ControlPolicial();
			} else{
				if (numeroAleatorio>0.9){
					this.unObstaculo= new Piquete();
				}
			}
		}
		
	}
	
	
	public void asignarSorpresaAleatoria(double numeroAleatorio){
		if (numeroAleatorio>0.7 && numeroAleatorio<= 0.8){
			this.unaSorpresa= new SorpresaDesfavorable();
		} else {
			if (numeroAleatorio>0.8 && numeroAleatorio<= 0.9){
				this.unaSorpresa= new SorpresaFavorable();
			} else{
				if (numeroAleatorio>0.9){
					this.unaSorpresa= new SorpresaCambioDeVehiculo();
				}
			}
		}
	}
	

	public Obstaculo getObstaculo() {
		return unObstaculo;
	}


	public void setObstaculo(Obstaculo unObstaculo) {
		this.unObstaculo = unObstaculo;
	}


	public Sorpresa getSorpresa() {
		return unaSorpresa;
	}


	public void setSorpresa(Sorpresa unaSorpresa) {
		this.unaSorpresa = unaSorpresa;
	}
	
	public void vaciarSorpresa() {
		
		this.unaSorpresa = new SorpresaVacia();		
	}


	public double getNumeroAleatorioSorpresa() {
		return numeroAleatorioSorpresa;
	}
	
	public double getNumeroAleatorioObstaculo() {
		return this.numeroAleatorioObstaculo;
	}


	public void setNumeroAleatorioSorpresa(double numeroAleatorio) {
		this.numeroAleatorioSorpresa = numeroAleatorio;
	}
	
	public void setNumeroAleatorioObstaculo(double numeroAleatorio) {
		this.numeroAleatorioObstaculo = numeroAleatorio;
	}
	
	
	public Element Serializar(){
		Element elemento = new Element("Calle");
		elemento.setAttribute("numeroAleatorioSorpresa",String.valueOf(numeroAleatorioSorpresa));
		elemento.setAttribute("numeroAleatorioObstaculo",String.valueOf(numeroAleatorioObstaculo));
		
		
		return elemento;
	}

}
